<!DOCTYPE html>
<html lang="en-US">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>基础命令 | Teng&#39;s blog</title>
    <meta name="generator" content="VuePress 1.9.7">
    <link rel="icon" href="/logo/favicon.ico">
    <meta name="description" content="">
    <meta name="keywords" content="大数据,java,h5,前端,人工智能,深度学习,go">
    <meta name="theme-color" content="#3eaf7c">
    
    <link rel="preload" href="/assets/css/0.styles.c17b3ac5.css" as="style"><link rel="preload" href="/assets/js/app.ab6a7ec7.js" as="script"><link rel="preload" href="/assets/js/2.bc9beebf.js" as="script"><link rel="preload" href="/assets/js/280.07da039a.js" as="script"><link rel="prefetch" href="/assets/js/10.829fbe09.js"><link rel="prefetch" href="/assets/js/100.21819a92.js"><link rel="prefetch" href="/assets/js/101.cba9a2fb.js"><link rel="prefetch" href="/assets/js/102.866a5b15.js"><link rel="prefetch" href="/assets/js/103.fdb7598a.js"><link rel="prefetch" href="/assets/js/104.75b80350.js"><link rel="prefetch" href="/assets/js/105.3030b5b8.js"><link rel="prefetch" href="/assets/js/106.11a5a8f2.js"><link rel="prefetch" href="/assets/js/107.232bdd92.js"><link rel="prefetch" href="/assets/js/108.a619d3d9.js"><link rel="prefetch" href="/assets/js/109.d31480d9.js"><link rel="prefetch" href="/assets/js/11.18a3d2d0.js"><link rel="prefetch" href="/assets/js/110.7b7051ad.js"><link rel="prefetch" href="/assets/js/111.6976153b.js"><link rel="prefetch" href="/assets/js/112.935a63bd.js"><link rel="prefetch" href="/assets/js/113.77296509.js"><link rel="prefetch" href="/assets/js/114.3ab3be4a.js"><link rel="prefetch" href="/assets/js/115.9b0dac10.js"><link rel="prefetch" href="/assets/js/116.55bc2cd6.js"><link rel="prefetch" href="/assets/js/117.75bd6d05.js"><link rel="prefetch" href="/assets/js/118.0dae142d.js"><link rel="prefetch" href="/assets/js/119.b1a2888c.js"><link rel="prefetch" href="/assets/js/12.81e292a4.js"><link rel="prefetch" href="/assets/js/120.6a3fd99f.js"><link rel="prefetch" href="/assets/js/121.ea1e1714.js"><link rel="prefetch" href="/assets/js/122.125ebe03.js"><link rel="prefetch" href="/assets/js/123.ec5bcef7.js"><link rel="prefetch" href="/assets/js/124.f346a2dc.js"><link rel="prefetch" href="/assets/js/125.11061d5a.js"><link rel="prefetch" href="/assets/js/126.7f8bc26b.js"><link rel="prefetch" href="/assets/js/127.26df99b6.js"><link rel="prefetch" href="/assets/js/128.0d4aae4f.js"><link rel="prefetch" href="/assets/js/129.ec01b50e.js"><link rel="prefetch" href="/assets/js/13.89c37359.js"><link rel="prefetch" href="/assets/js/130.9e570618.js"><link rel="prefetch" href="/assets/js/131.ffaed293.js"><link rel="prefetch" href="/assets/js/132.6ef77a2c.js"><link rel="prefetch" href="/assets/js/133.893078b6.js"><link rel="prefetch" href="/assets/js/134.a5229ebf.js"><link rel="prefetch" href="/assets/js/135.e1015261.js"><link rel="prefetch" href="/assets/js/136.655ac222.js"><link rel="prefetch" href="/assets/js/137.4c18a7dc.js"><link rel="prefetch" href="/assets/js/138.17cf92aa.js"><link rel="prefetch" href="/assets/js/139.7e23a82f.js"><link rel="prefetch" href="/assets/js/14.5a11397f.js"><link rel="prefetch" href="/assets/js/140.570f33f7.js"><link rel="prefetch" href="/assets/js/141.eb538cc8.js"><link rel="prefetch" href="/assets/js/142.2f38d42f.js"><link rel="prefetch" href="/assets/js/143.a32de735.js"><link rel="prefetch" href="/assets/js/144.76a63ee6.js"><link rel="prefetch" href="/assets/js/145.42483d13.js"><link rel="prefetch" href="/assets/js/146.068119e8.js"><link rel="prefetch" href="/assets/js/147.64de6f65.js"><link rel="prefetch" href="/assets/js/148.5709a561.js"><link rel="prefetch" href="/assets/js/149.9373f1d3.js"><link rel="prefetch" href="/assets/js/15.f98080cd.js"><link rel="prefetch" href="/assets/js/150.85328596.js"><link rel="prefetch" href="/assets/js/151.8179d926.js"><link rel="prefetch" href="/assets/js/152.357ef7ac.js"><link rel="prefetch" href="/assets/js/153.a7f37700.js"><link rel="prefetch" href="/assets/js/154.259e0731.js"><link rel="prefetch" href="/assets/js/155.609478f3.js"><link rel="prefetch" href="/assets/js/156.c02413b4.js"><link rel="prefetch" href="/assets/js/157.4225246d.js"><link rel="prefetch" href="/assets/js/158.90aa3193.js"><link rel="prefetch" href="/assets/js/159.48a36d7f.js"><link rel="prefetch" href="/assets/js/16.c2c39a12.js"><link rel="prefetch" href="/assets/js/160.1483c525.js"><link rel="prefetch" href="/assets/js/161.935da955.js"><link rel="prefetch" href="/assets/js/162.623fec51.js"><link rel="prefetch" href="/assets/js/163.9b588340.js"><link rel="prefetch" href="/assets/js/164.30ec5aba.js"><link rel="prefetch" href="/assets/js/165.189a8317.js"><link rel="prefetch" href="/assets/js/166.5af6c2ec.js"><link rel="prefetch" href="/assets/js/167.9dff1ac7.js"><link rel="prefetch" href="/assets/js/168.622f7001.js"><link rel="prefetch" href="/assets/js/169.2e7169b6.js"><link rel="prefetch" href="/assets/js/17.b69c805b.js"><link rel="prefetch" href="/assets/js/170.722cbe91.js"><link rel="prefetch" href="/assets/js/171.bc79c387.js"><link rel="prefetch" href="/assets/js/172.ee6817b8.js"><link rel="prefetch" href="/assets/js/173.b35d740e.js"><link rel="prefetch" href="/assets/js/174.5c6e7df5.js"><link rel="prefetch" href="/assets/js/175.d4a5903b.js"><link rel="prefetch" href="/assets/js/176.7be8b3ab.js"><link rel="prefetch" href="/assets/js/177.21a314f9.js"><link rel="prefetch" href="/assets/js/178.7c287ca3.js"><link rel="prefetch" href="/assets/js/179.b4682242.js"><link rel="prefetch" href="/assets/js/18.8b504010.js"><link rel="prefetch" href="/assets/js/180.0098b166.js"><link rel="prefetch" href="/assets/js/181.1ade00c6.js"><link rel="prefetch" href="/assets/js/182.2cdebd59.js"><link rel="prefetch" href="/assets/js/183.019718a7.js"><link rel="prefetch" href="/assets/js/184.d4ab9703.js"><link rel="prefetch" href="/assets/js/185.50d60e28.js"><link rel="prefetch" href="/assets/js/186.3a98e144.js"><link rel="prefetch" href="/assets/js/187.9ed4524b.js"><link rel="prefetch" href="/assets/js/188.c3a8a353.js"><link rel="prefetch" href="/assets/js/189.b949cdaa.js"><link rel="prefetch" href="/assets/js/19.6860ea74.js"><link rel="prefetch" href="/assets/js/190.7a54fb5e.js"><link rel="prefetch" href="/assets/js/191.804d06a5.js"><link rel="prefetch" href="/assets/js/192.c729ba9b.js"><link rel="prefetch" href="/assets/js/193.e8d492ad.js"><link rel="prefetch" href="/assets/js/194.49b4668e.js"><link rel="prefetch" href="/assets/js/195.e4508c24.js"><link rel="prefetch" href="/assets/js/196.538420c6.js"><link rel="prefetch" href="/assets/js/197.56fda656.js"><link rel="prefetch" href="/assets/js/198.75e420ad.js"><link rel="prefetch" href="/assets/js/199.67784aef.js"><link rel="prefetch" href="/assets/js/20.82f2e898.js"><link rel="prefetch" href="/assets/js/200.b32cd750.js"><link rel="prefetch" href="/assets/js/201.594db75b.js"><link rel="prefetch" href="/assets/js/202.70b380ec.js"><link rel="prefetch" href="/assets/js/203.0de30338.js"><link rel="prefetch" href="/assets/js/204.360c28c7.js"><link rel="prefetch" href="/assets/js/205.5b4b553b.js"><link rel="prefetch" href="/assets/js/206.6bd13fc8.js"><link rel="prefetch" href="/assets/js/207.875be01b.js"><link rel="prefetch" href="/assets/js/208.00694e2b.js"><link rel="prefetch" href="/assets/js/209.1fa15603.js"><link rel="prefetch" href="/assets/js/21.3f050c1d.js"><link rel="prefetch" href="/assets/js/210.f11e4fe3.js"><link rel="prefetch" href="/assets/js/211.a9beca8a.js"><link rel="prefetch" href="/assets/js/212.2fb3a3b1.js"><link rel="prefetch" href="/assets/js/213.c2fb7dcf.js"><link rel="prefetch" href="/assets/js/214.7613f2f7.js"><link rel="prefetch" href="/assets/js/215.ac00cd4b.js"><link rel="prefetch" href="/assets/js/216.926eb535.js"><link rel="prefetch" href="/assets/js/217.e03af99a.js"><link rel="prefetch" href="/assets/js/218.0212a1a9.js"><link rel="prefetch" href="/assets/js/219.318a1817.js"><link rel="prefetch" href="/assets/js/22.f2a18e55.js"><link rel="prefetch" href="/assets/js/220.34f368ec.js"><link rel="prefetch" href="/assets/js/221.1d325330.js"><link rel="prefetch" href="/assets/js/222.f8ac9e1e.js"><link rel="prefetch" href="/assets/js/223.1d081b10.js"><link rel="prefetch" href="/assets/js/224.d4a3c833.js"><link rel="prefetch" href="/assets/js/225.86046773.js"><link rel="prefetch" href="/assets/js/226.ee01e5ed.js"><link rel="prefetch" href="/assets/js/227.cc700349.js"><link rel="prefetch" href="/assets/js/228.121d2708.js"><link rel="prefetch" href="/assets/js/229.411a1a59.js"><link rel="prefetch" href="/assets/js/23.8416a606.js"><link rel="prefetch" href="/assets/js/230.ce1cd57d.js"><link rel="prefetch" href="/assets/js/231.9e415c00.js"><link rel="prefetch" href="/assets/js/232.af1434b0.js"><link rel="prefetch" href="/assets/js/233.aedf0a69.js"><link rel="prefetch" href="/assets/js/234.7343179f.js"><link rel="prefetch" href="/assets/js/235.3ea94188.js"><link rel="prefetch" href="/assets/js/236.e632719a.js"><link rel="prefetch" href="/assets/js/237.34a70a59.js"><link rel="prefetch" href="/assets/js/238.9582b4be.js"><link rel="prefetch" href="/assets/js/239.2a1f2f8d.js"><link rel="prefetch" href="/assets/js/24.73629fb4.js"><link rel="prefetch" href="/assets/js/240.e0563eb9.js"><link rel="prefetch" href="/assets/js/241.7a2b4d6e.js"><link rel="prefetch" href="/assets/js/242.f9f59053.js"><link rel="prefetch" href="/assets/js/243.95904034.js"><link rel="prefetch" href="/assets/js/244.0c91ecaa.js"><link rel="prefetch" href="/assets/js/245.58988353.js"><link rel="prefetch" href="/assets/js/246.73360878.js"><link rel="prefetch" href="/assets/js/247.3f36cb13.js"><link rel="prefetch" href="/assets/js/248.9bca99ac.js"><link rel="prefetch" href="/assets/js/249.e78a3dbb.js"><link rel="prefetch" href="/assets/js/25.f62ba06b.js"><link rel="prefetch" href="/assets/js/250.5999a7b3.js"><link rel="prefetch" href="/assets/js/251.5204362e.js"><link rel="prefetch" href="/assets/js/252.a731f0e2.js"><link rel="prefetch" href="/assets/js/253.ef15afff.js"><link rel="prefetch" href="/assets/js/254.8e0d8aa8.js"><link rel="prefetch" href="/assets/js/255.53408731.js"><link rel="prefetch" href="/assets/js/256.3d08ae8f.js"><link rel="prefetch" href="/assets/js/257.1de6306c.js"><link rel="prefetch" href="/assets/js/258.b3ec2e6c.js"><link rel="prefetch" href="/assets/js/259.40e6c088.js"><link rel="prefetch" href="/assets/js/26.ed3d7d52.js"><link rel="prefetch" href="/assets/js/260.05ea317d.js"><link rel="prefetch" href="/assets/js/261.048af235.js"><link rel="prefetch" href="/assets/js/262.905ce2e2.js"><link rel="prefetch" href="/assets/js/263.8ace396b.js"><link rel="prefetch" href="/assets/js/264.10841fe2.js"><link rel="prefetch" href="/assets/js/265.f94f5548.js"><link rel="prefetch" href="/assets/js/266.bf7b6e06.js"><link rel="prefetch" href="/assets/js/267.4c03cbf4.js"><link rel="prefetch" href="/assets/js/268.1886e607.js"><link rel="prefetch" href="/assets/js/269.9dfca98b.js"><link rel="prefetch" href="/assets/js/27.18a2fe1c.js"><link rel="prefetch" href="/assets/js/270.a0ebdd62.js"><link rel="prefetch" href="/assets/js/271.cb9ce68b.js"><link rel="prefetch" href="/assets/js/272.99ea7c05.js"><link rel="prefetch" href="/assets/js/273.7f5c9d16.js"><link rel="prefetch" href="/assets/js/274.1ca50474.js"><link rel="prefetch" href="/assets/js/275.e0a79a93.js"><link rel="prefetch" href="/assets/js/276.5e9f441d.js"><link rel="prefetch" href="/assets/js/277.31f82a4b.js"><link rel="prefetch" href="/assets/js/278.2df5557a.js"><link rel="prefetch" href="/assets/js/279.6caef400.js"><link rel="prefetch" href="/assets/js/28.30687ae2.js"><link rel="prefetch" href="/assets/js/281.81b66752.js"><link rel="prefetch" href="/assets/js/282.a362880b.js"><link rel="prefetch" href="/assets/js/283.37de8db2.js"><link rel="prefetch" href="/assets/js/284.31a9bcd5.js"><link rel="prefetch" href="/assets/js/285.e1ed9d70.js"><link rel="prefetch" href="/assets/js/286.5cd73851.js"><link rel="prefetch" href="/assets/js/287.b598b99a.js"><link rel="prefetch" href="/assets/js/288.a2580005.js"><link rel="prefetch" href="/assets/js/289.83413eb3.js"><link rel="prefetch" href="/assets/js/29.8f48fd0e.js"><link rel="prefetch" href="/assets/js/290.405974a0.js"><link rel="prefetch" href="/assets/js/291.f762f6f9.js"><link rel="prefetch" href="/assets/js/292.f5851afc.js"><link rel="prefetch" href="/assets/js/293.8e7d9ffa.js"><link rel="prefetch" href="/assets/js/294.3694f780.js"><link rel="prefetch" href="/assets/js/295.84d9cd4c.js"><link rel="prefetch" href="/assets/js/296.0a6bbe5d.js"><link rel="prefetch" href="/assets/js/297.195f8ede.js"><link rel="prefetch" href="/assets/js/3.7494bd83.js"><link rel="prefetch" href="/assets/js/30.5f000d59.js"><link rel="prefetch" href="/assets/js/31.2f3aea00.js"><link rel="prefetch" href="/assets/js/32.78912726.js"><link rel="prefetch" href="/assets/js/33.4f600444.js"><link rel="prefetch" href="/assets/js/34.1ec8259c.js"><link rel="prefetch" href="/assets/js/35.bc414639.js"><link rel="prefetch" href="/assets/js/36.b0c05f62.js"><link rel="prefetch" href="/assets/js/37.7e626d70.js"><link rel="prefetch" href="/assets/js/38.bb3a6a22.js"><link rel="prefetch" href="/assets/js/39.3d17059f.js"><link rel="prefetch" href="/assets/js/4.ff6020d1.js"><link rel="prefetch" href="/assets/js/40.2023aaeb.js"><link rel="prefetch" href="/assets/js/41.64452f22.js"><link rel="prefetch" href="/assets/js/42.32522c9c.js"><link rel="prefetch" href="/assets/js/43.ae24bdff.js"><link rel="prefetch" href="/assets/js/44.3acc6c82.js"><link rel="prefetch" href="/assets/js/45.2cec263d.js"><link rel="prefetch" href="/assets/js/46.ceacfcd8.js"><link rel="prefetch" href="/assets/js/47.59030139.js"><link rel="prefetch" href="/assets/js/48.fa5e3c59.js"><link rel="prefetch" href="/assets/js/49.2054398b.js"><link rel="prefetch" href="/assets/js/5.f2ade644.js"><link rel="prefetch" href="/assets/js/50.47a76469.js"><link rel="prefetch" href="/assets/js/51.c36ce30b.js"><link rel="prefetch" href="/assets/js/52.72ce6650.js"><link rel="prefetch" href="/assets/js/53.9dbe65dd.js"><link rel="prefetch" href="/assets/js/54.b571c195.js"><link rel="prefetch" href="/assets/js/55.3502ffd5.js"><link rel="prefetch" href="/assets/js/56.790119c4.js"><link rel="prefetch" href="/assets/js/57.aae4081b.js"><link rel="prefetch" href="/assets/js/58.e54d1920.js"><link rel="prefetch" href="/assets/js/59.6eaa8c48.js"><link rel="prefetch" href="/assets/js/6.04d544f0.js"><link rel="prefetch" href="/assets/js/60.7b2d3e47.js"><link rel="prefetch" href="/assets/js/61.093542b8.js"><link rel="prefetch" href="/assets/js/62.d0af83fd.js"><link rel="prefetch" href="/assets/js/63.b57f13fb.js"><link rel="prefetch" href="/assets/js/64.acbb2295.js"><link rel="prefetch" href="/assets/js/65.87d05864.js"><link rel="prefetch" href="/assets/js/66.773a0404.js"><link rel="prefetch" href="/assets/js/67.c66984d0.js"><link rel="prefetch" href="/assets/js/68.77bfcb54.js"><link rel="prefetch" href="/assets/js/69.7e3d1cc4.js"><link rel="prefetch" href="/assets/js/7.bc46b052.js"><link rel="prefetch" href="/assets/js/70.dbd5eb9b.js"><link rel="prefetch" href="/assets/js/71.109923c3.js"><link rel="prefetch" href="/assets/js/72.c92d7f25.js"><link rel="prefetch" href="/assets/js/73.a8ef2055.js"><link rel="prefetch" href="/assets/js/74.79119a72.js"><link rel="prefetch" href="/assets/js/75.009bcb5e.js"><link rel="prefetch" href="/assets/js/76.cba94ffd.js"><link rel="prefetch" href="/assets/js/77.caa07e47.js"><link rel="prefetch" href="/assets/js/78.fef64e9e.js"><link rel="prefetch" href="/assets/js/79.72d6eb81.js"><link rel="prefetch" href="/assets/js/8.8cf6541b.js"><link rel="prefetch" href="/assets/js/80.9370a1bd.js"><link rel="prefetch" href="/assets/js/81.f53b6c0a.js"><link rel="prefetch" href="/assets/js/82.01861305.js"><link rel="prefetch" href="/assets/js/83.4d69c6c5.js"><link rel="prefetch" href="/assets/js/84.ea80ae96.js"><link rel="prefetch" href="/assets/js/85.34c10294.js"><link rel="prefetch" href="/assets/js/86.4c7d6d58.js"><link rel="prefetch" href="/assets/js/87.ade6c1ee.js"><link rel="prefetch" href="/assets/js/88.306bb690.js"><link rel="prefetch" href="/assets/js/89.ed02954c.js"><link rel="prefetch" href="/assets/js/9.b3d99320.js"><link rel="prefetch" href="/assets/js/90.8db20502.js"><link rel="prefetch" href="/assets/js/91.3d01b6a4.js"><link rel="prefetch" href="/assets/js/92.b3dcea87.js"><link rel="prefetch" href="/assets/js/93.28790aa5.js"><link rel="prefetch" href="/assets/js/94.45722d7d.js"><link rel="prefetch" href="/assets/js/95.c04b6585.js"><link rel="prefetch" href="/assets/js/96.7c4d9328.js"><link rel="prefetch" href="/assets/js/97.85bb6089.js"><link rel="prefetch" href="/assets/js/98.e22a9c08.js"><link rel="prefetch" href="/assets/js/99.fd9f1f1d.js">
    <link rel="stylesheet" href="/assets/css/0.styles.c17b3ac5.css">
  </head>
  <body class="theme-mode-light">
    <div id="app" data-server-rendered="true"><div class="theme-container sidebar-open have-rightmenu"><header class="navbar blur"><div title="目录" class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/" class="home-link router-link-active"><img src="/logo/TB-mini.png" alt="Teng's blog" class="logo"> <span class="site-name can-hide">Teng's blog</span></a> <div class="links"><div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><div class="nav-item"><a href="/" class="nav-link">首页</a></div><div class="nav-item"><a href="/note/java/" class="nav-link">Java</a></div><div class="nav-item"><a href="/note/font-end/" class="nav-link">H5前端</a></div> <a href="https://github.com/shetengteng" target="_blank" rel="noopener noreferrer" class="repo-link">
    GitHub
    <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></nav></div></header> <div class="sidebar-mask"></div> <div class="sidebar-hover-trigger"></div> <aside class="sidebar" style="display:none;"><!----> <nav class="nav-links"><div class="nav-item"><a href="/" class="nav-link">首页</a></div><div class="nav-item"><a href="/note/java/" class="nav-link">Java</a></div><div class="nav-item"><a href="/note/font-end/" class="nav-link">H5前端</a></div> <a href="https://github.com/shetengteng" target="_blank" rel="noopener noreferrer" class="repo-link">
    GitHub
    <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></nav>  <ul class="sidebar-links"><li><a href="/pages/c29ae4/" class="sidebar-link">背景介绍</a></li><li><a href="/pages/b38488/" class="sidebar-link">安装</a></li><li><a href="/pages/388924/" class="sidebar-link">配置说明</a></li><li><a href="/pages/ff1ac4/" aria-current="page" class="active sidebar-link">基础命令</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/pages/ff1ac4/#ansible-命令" class="sidebar-link">ansible 命令</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/pages/ff1ac4/#查看帮助" class="sidebar-link">查看帮助</a></li><li class="sidebar-sub-header"><a href="/pages/ff1ac4/#测试主机是否连通" class="sidebar-link">测试主机是否连通</a></li><li class="sidebar-sub-header"><a href="/pages/ff1ac4/#查看主机列表" class="sidebar-link">查看主机列表</a></li><li class="sidebar-sub-header"><a href="/pages/ff1ac4/#在group中指定某台主机执行" class="sidebar-link">在group中指定某台主机执行</a></li><li class="sidebar-sub-header"><a href="/pages/ff1ac4/#host-pattern" class="sidebar-link">host-pattern</a></li><li class="sidebar-sub-header"><a href="/pages/ff1ac4/#命令执行过程" class="sidebar-link">命令执行过程</a></li><li class="sidebar-sub-header"><a href="/pages/ff1ac4/#使用示例" class="sidebar-link">使用示例</a></li></ul></li><li class="sidebar-sub-header"><a href="/pages/ff1ac4/#ansible-doc-命令" class="sidebar-link">ansible-doc 命令</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/pages/ff1ac4/#列出所有模块" class="sidebar-link">列出所有模块</a></li><li class="sidebar-sub-header"><a href="/pages/ff1ac4/#查看指定模块帮助" class="sidebar-link">查看指定模块帮助</a></li><li class="sidebar-sub-header"><a href="/pages/ff1ac4/#查看指定模块简化帮助" class="sidebar-link">查看指定模块简化帮助</a></li></ul></li><li class="sidebar-sub-header"><a href="/pages/ff1ac4/#附-ssh-keygen配置" class="sidebar-link">附：ssh-keygen配置</a></li><li class="sidebar-sub-header"><a href="/pages/ff1ac4/#ansible-galaxy-命令" class="sidebar-link">ansible-galaxy 命令</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/pages/ff1ac4/#安装一个role" class="sidebar-link">安装一个role</a></li><li class="sidebar-sub-header"><a href="/pages/ff1ac4/#列出已经安装的配置" class="sidebar-link">列出已经安装的配置</a></li><li class="sidebar-sub-header"><a href="/pages/ff1ac4/#删除已安装的配置" class="sidebar-link">删除已安装的配置</a></li></ul></li><li class="sidebar-sub-header"><a href="/pages/ff1ac4/#ansible-pull-命令" class="sidebar-link">ansible-pull 命令</a></li><li class="sidebar-sub-header"><a href="/pages/ff1ac4/#ansible-playbook-命令" class="sidebar-link">ansible-playbook 命令</a></li><li class="sidebar-sub-header"><a href="/pages/ff1ac4/#ansible-vault-命令" class="sidebar-link">ansible-vault 命令</a></li><li class="sidebar-sub-header"><a href="/pages/ff1ac4/#ansible-console命令" class="sidebar-link">ansible-console命令</a></li></ul></li><li><a href="/pages/2c8a0a/" class="sidebar-link">常用模块</a></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>Playbook</span> <span class="arrow right"></span></p> <!----></section></li></ul> </aside> <div><main class="page"><div class="theme-vdoing-wrapper "><div class="articleInfo-wrap" data-v-0c557b5e><div class="articleInfo" data-v-0c557b5e><ul class="breadcrumbs" data-v-0c557b5e><li data-v-0c557b5e><a href="/" title="首页" class="iconfont icon-home router-link-active" data-v-0c557b5e></a></li> <li data-v-0c557b5e><a href="/note/ansible/#Tool-Ansible" data-v-0c557b5e>Tool-Ansible</a></li></ul> <div class="info" data-v-0c557b5e><div title="作者" class="author iconfont icon-touxiang" data-v-0c557b5e><a href="https://github.com/shetengteng" target="_blank" title="作者" class="beLink" data-v-0c557b5e>Shetengteng</a></div> <div title="创建时间" class="date iconfont icon-riqi" data-v-0c557b5e><a href="javascript:;" data-v-0c557b5e>2022-05-13</a></div> <!----></div></div></div> <!----> <div class="content-wrapper"><div class="right-menu-wrapper"><div class="right-menu-margin"><div class="right-menu-content"></div></div></div> <h1><!---->基础命令<!----></h1>  <div class="theme-vdoing-content content__default"><p>主要的命令</p> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code>ansible
ansible-doc
ansible-playbook
ansible-vault
ansible-console
ansible-galaxy
ansible-pull
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br></div></div><h2 id="ansible-命令"><a href="#ansible-命令" class="header-anchor">#</a> ansible 命令</h2> <blockquote><p>ansible通过ssh实现配置管理、应用部署、任务执行等功能</p> <p>建议配置ansible端能基于密钥认证的方式联系各被管理节点</p></blockquote> <p>本质是一个ansible执行命令的软连接</p> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code>ansible <span class="token operator">&lt;</span>host-pattern<span class="token operator">&gt;</span> <span class="token punctuation">[</span>-m module_name<span class="token punctuation">]</span> <span class="token punctuation">[</span>-a args<span class="token punctuation">]</span>
<span class="token comment"># ansible +被管理的主机(ALL) +模块  +参数</span>
    --version              显示版本
    -m module              指定模块，默认为command
    -v                     详细过程 –vv -vvv更详细
    --list-hosts           显示主机列表，可简写 --list
    -k, --ask-pass         提示输入ssh连接密码,默认Key验证
    -C, --check            检查，并不执行
    -T, --timeout<span class="token operator">=</span>TIMEOUT  执行命令的超时时间,默认10s
    -u, --user<span class="token operator">=</span>REMOTE_USER 执行远程执行的用户
    -b, --become           代替旧版的sudo切换
        --become-user<span class="token operator">=</span>USERNAME 指定sudo的runas用户,默认为root
    -K, --ask-become-pass  提示输入sudo时的口令
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br></div></div><h3 id="查看帮助"><a href="#查看帮助" class="header-anchor">#</a> 查看帮助</h3> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code>ansible --help
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><h3 id="测试主机是否连通"><a href="#测试主机是否连通" class="header-anchor">#</a> 测试主机是否连通</h3> <blockquote><p>检测所有主机的网络状态，默认情况下连接被管理的主机是ssh基于key验证,如果没有配置key，权限将会被拒绝</p> <p>因此需要指定以谁的身份连接,输入用户密码,必须保证被管理主机用户密码一致</p> <p>ansible all -m ping -k</p> <p>或者实现基于key验证 将公钥ssh-copy-id到被管理的主机上 , 实现免密登录</p> <p>ansible all -m ping</p></blockquote> <p>使用ansible的ping模块进行测试，通过 -m 参数调用模块</p> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code><span class="token punctuation">[</span>root@linux101 ~<span class="token punctuation">]</span><span class="token comment"># ansible 192.168.10.102 -m ping</span>
<span class="token punctuation">[</span>WARNING<span class="token punctuation">]</span>: provided hosts list is empty, only localhost is available. Note that the implicit localhost
does not match <span class="token string">'all'</span>
<span class="token punctuation">[</span>WARNING<span class="token punctuation">]</span>: Could not match supplied <span class="token function">host</span> pattern, ignoring: <span class="token number">192.168</span>.10.102
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br></div></div><p>有警告信息，需要添加到hosts清单中</p> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code><span class="token punctuation">[</span>root@linux101 ~<span class="token punctuation">]</span><span class="token comment"># vim /etc/ansible/hosts</span>

<span class="token comment"># 添加要测试的主机</span>
<span class="token number">192.168</span>.10.102
<span class="token number">192.168</span>.10.103
<span class="token number">192.168</span>.10.104
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br></div></div><p>再次尝试，由于没有权限（ansible 的ping是通过ssh协议进行访问）报错</p> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code><span class="token punctuation">[</span>root@linux101 ~<span class="token punctuation">]</span><span class="token comment"># ansible 192.168.10.102 -m ping</span>
<span class="token number">192.168</span>.10.102 <span class="token operator">|</span> UNREACHABLE<span class="token operator">!</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token punctuation">{</span>
    <span class="token string">&quot;changed&quot;</span><span class="token builtin class-name">:</span> false, 
    <span class="token string">&quot;msg&quot;</span><span class="token builtin class-name">:</span> <span class="token string">&quot;Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).&quot;</span>, 
    <span class="token string">&quot;unreachable&quot;</span><span class="token builtin class-name">:</span> <span class="token boolean">true</span>
<span class="token punctuation">}</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br></div></div><p>使用用户名和密码进行访问，使用-k进行输入密码，而用户名则是当前主机的用户（如当前使用root登录），如果要使用其他用户，可以使用-u指定用户名</p> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code><span class="token punctuation">[</span>root@linux101 ~<span class="token punctuation">]</span><span class="token comment"># ansible 192.168.10.102 -m ping -k</span>
SSH password: <span class="token comment"># 输入密码</span>
<span class="token number">192.168</span>.10.102 <span class="token operator">|</span> SUCCESS <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token punctuation">{</span>
    <span class="token string">&quot;ansible_facts&quot;</span><span class="token builtin class-name">:</span> <span class="token punctuation">{</span>
        <span class="token string">&quot;discovered_interpreter_python&quot;</span><span class="token builtin class-name">:</span> <span class="token string">&quot;/usr/bin/python&quot;</span>
    <span class="token punctuation">}</span>, 
    <span class="token string">&quot;changed&quot;</span><span class="token builtin class-name">:</span> false, 
    <span class="token string">&quot;ping&quot;</span><span class="token builtin class-name">:</span> <span class="token string">&quot;pong&quot;</span>
<span class="token punctuation">}</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br></div></div><h4 id="对多台主机发送ping命令"><a href="#对多台主机发送ping命令" class="header-anchor">#</a> 对多台主机发送ping命令</h4> <p>给多台主机发送命令</p> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code><span class="token punctuation">[</span>root@linux101 ~<span class="token punctuation">]</span><span class="token comment"># ansible 192.168.10.102,192.168.10.103 -m ping -k</span>
SSH password: 
<span class="token number">192.168</span>.10.103 <span class="token operator">|</span> FAILED<span class="token operator">!</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token punctuation">{</span>
    <span class="token string">&quot;msg&quot;</span><span class="token builtin class-name">:</span> <span class="token string">&quot;Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host.&quot;</span>
<span class="token punctuation">}</span>
<span class="token number">192.168</span>.10.102 <span class="token operator">|</span> SUCCESS <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token punctuation">{</span>
    <span class="token string">&quot;ansible_facts&quot;</span><span class="token builtin class-name">:</span> <span class="token punctuation">{</span>
        <span class="token string">&quot;discovered_interpreter_python&quot;</span><span class="token builtin class-name">:</span> <span class="token string">&quot;/usr/bin/python&quot;</span>
    <span class="token punctuation">}</span>, 
    <span class="token string">&quot;changed&quot;</span><span class="token builtin class-name">:</span> false, 
    <span class="token string">&quot;ping&quot;</span><span class="token builtin class-name">:</span> <span class="token string">&quot;pong&quot;</span>
<span class="token punctuation">}</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br></div></div><p>对于报错信息  <code>known_hosts</code> 需要调用ssh先登录一下，作为一个可信的host</p> <ul><li>注意：使用Ctrl + D退出ssh</li> <li>注意：如果在ansible配置文件中host_key_checking=false，则不会出现该错误，则不需要执行如下命令</li></ul> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code><span class="token function">ssh</span> <span class="token number">192.168</span>.10.103
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><p>重新发送多个主机的ping命令</p> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code><span class="token punctuation">[</span>root@linux101 ~<span class="token punctuation">]</span><span class="token comment"># ansible 192.168.10.102,192.168.10.103 -m ping -k</span>
SSH password: 
<span class="token number">192.168</span>.10.102 <span class="token operator">|</span> SUCCESS <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token punctuation">{</span>
    <span class="token string">&quot;ansible_facts&quot;</span><span class="token builtin class-name">:</span> <span class="token punctuation">{</span>
        <span class="token string">&quot;discovered_interpreter_python&quot;</span><span class="token builtin class-name">:</span> <span class="token string">&quot;/usr/bin/python&quot;</span>
    <span class="token punctuation">}</span>, 
    <span class="token string">&quot;changed&quot;</span><span class="token builtin class-name">:</span> false, 
    <span class="token string">&quot;ping&quot;</span><span class="token builtin class-name">:</span> <span class="token string">&quot;pong&quot;</span>
<span class="token punctuation">}</span>
<span class="token number">192.168</span>.10.103 <span class="token operator">|</span> SUCCESS <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token punctuation">{</span>
    <span class="token string">&quot;ansible_facts&quot;</span><span class="token builtin class-name">:</span> <span class="token punctuation">{</span>
        <span class="token string">&quot;discovered_interpreter_python&quot;</span><span class="token builtin class-name">:</span> <span class="token string">&quot;/usr/bin/python&quot;</span>
    <span class="token punctuation">}</span>, 
    <span class="token string">&quot;changed&quot;</span><span class="token builtin class-name">:</span> false, 
    <span class="token string">&quot;ping&quot;</span><span class="token builtin class-name">:</span> <span class="token string">&quot;pong&quot;</span>
<span class="token punctuation">}</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br></div></div><p>如此操作的缺点：多个主机使用相同的key，如何解决，需要对其他被控机进行秘钥对配置</p> <h4 id="对所有主机发送ping命令"><a href="#对所有主机发送ping命令" class="header-anchor">#</a> 对所有主机发送ping命令</h4> <p>针对配置的/etc/ansible/hosts中的所有主机执行相同的命令</p> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code>ansible all -m <span class="token function">ping</span> -k
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><p>在进行ssh-keygen配置后，可以执行如下命令</p> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code>ansible all -m <span class="token function">ping</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><h4 id="使用主机分组进行命令发送"><a href="#使用主机分组进行命令发送" class="header-anchor">#</a> 使用主机分组进行命令发送</h4> <p>在主机清单中配置如下</p> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code><span class="token punctuation">[</span>websrvs<span class="token punctuation">]</span>
<span class="token number">192.168</span>.10.10<span class="token punctuation">[</span><span class="token number">2</span>:4<span class="token punctuation">]</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><p>执行命令</p> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code>ansible websrvs -m <span class="token function">ping</span> -k
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><h3 id="查看主机列表"><a href="#查看主机列表" class="header-anchor">#</a> 查看主机列表</h3> <p>使用--list-host查看，也可以使用--list查看</p> <p>列出所有主机</p> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code><span class="token punctuation">[</span>root@linux101 ~<span class="token punctuation">]</span><span class="token comment"># ansible all --list-hosts </span>
  hosts <span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">)</span>:
    <span class="token number">192.168</span>.10.102
    <span class="token number">192.168</span>.10.103
    <span class="token number">192.168</span>.10.104
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br></div></div><p>列出指定分组的主机</p> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code><span class="token punctuation">[</span>root@linux101 ~<span class="token punctuation">]</span><span class="token comment"># ansible websrvs  --list-hosts</span>
  hosts <span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">)</span>:
    <span class="token number">192.168</span>.10.102
    <span class="token number">192.168</span>.10.103
    <span class="token number">192.168</span>.10.104
<span class="token punctuation">[</span>root@linux101 ~<span class="token punctuation">]</span><span class="token comment"># ansible websrvs  --list</span>
  hosts <span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">)</span>:
    <span class="token number">192.168</span>.10.102
    <span class="token number">192.168</span>.10.103
    <span class="token number">192.168</span>.10.104
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br></div></div><h3 id="在group中指定某台主机执行"><a href="#在group中指定某台主机执行" class="header-anchor">#</a> 在group中指定某台主机执行</h3> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code>ansible websrvs -a <span class="token string">'getent passwd test2'</span> --limit<span class="token operator">=</span><span class="token number">192.168</span>.10.101
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><h3 id="host-pattern"><a href="#host-pattern" class="header-anchor">#</a> host-pattern</h3> <p>匹配主机的列表，对于逻辑条件，推荐使用单引号括起来</p> <h4 id="all"><a href="#all" class="header-anchor">#</a> All</h4> <p>表示所有Inventory中的所有主机</p> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code>ansible all –m <span class="token function">ping</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><h4 id="通配符"><a href="#通配符" class="header-anchor">#</a> 通配符 <code>*</code></h4> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code>ansible <span class="token string">&quot;*&quot;</span> -m <span class="token function">ping</span>  <span class="token comment"># *表示所有主机</span>
ansible <span class="token number">192.168</span>.1.* -m <span class="token function">ping</span>
ansible <span class="token string">&quot;*srvs&quot;</span> -m <span class="token function">ping</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div><h4 id="或关系"><a href="#或关系" class="header-anchor">#</a> 或关系 <code>:</code></h4> <p>取得并集</p> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code>ansible <span class="token string">&quot;websrvs:appsrvs&quot;</span> -m <span class="token function">ping</span>
ansible “192.168.1.10:192.168.1.20” -m <span class="token function">ping</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><h4 id="逻辑与"><a href="#逻辑与" class="header-anchor">#</a> 逻辑与 <code>:&amp;</code></h4> <p>取得交集</p> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code><span class="token comment"># 在websrvs组并且在dbsrvs组中的主机</span>
ansible <span class="token string">&quot;websrvs:&amp;dbsrvs&quot;</span> –m <span class="token function">ping</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><h4 id="逻辑非"><a href="#逻辑非" class="header-anchor">#</a> 逻辑非 <code>:!</code></h4> <p>注意：此处为单引号</p> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code><span class="token comment"># 在websrvs组，但不在dbsrvs组中的主机</span>
ansible <span class="token string">'websrvs:!dbsrvs'</span> –m <span class="token function">ping</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><h4 id="综合逻辑"><a href="#综合逻辑" class="header-anchor">#</a> 综合逻辑</h4> <p>注意：此处为单引号</p> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code>ansible <span class="token string">'websrvs:dbsrvs:&amp;appsrvs:!ftpsrvs'</span> –m <span class="token function">ping</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><h4 id="正则表达式"><a href="#正则表达式" class="header-anchor">#</a> 正则表达式</h4> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code>ansible <span class="token string">&quot;websrvs:&amp;dbsrvs&quot;</span> –m <span class="token function">ping</span>
ansible <span class="token string">&quot;~(web|db).*\.stt\.com&quot;</span> –m <span class="token function">ping</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><h3 id="命令执行过程"><a href="#命令执行过程" class="header-anchor">#</a> 命令执行过程</h3> <ol><li>加载自己的配置文件，默认/etc/ansible/ansible.cfg</li> <li>加载自己对应的模块文件，如command</li> <li>通过ansible将模块或命令生成对应的临时py文件，并将该文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件</li> <li>给文件+x执行</li> <li>执行并返回结果</li> <li>删除临时py文件，sleep 0退出</li></ol> <p>执行状态</p> <ul><li>绿色：执行成功并且不需要做改变的操作</li> <li>黄色：执行成功并且对目标主机做变更</li> <li>红色：执行失败</li></ul> <p>使用-vv查看执行过程，如果使用-vvv可以查看更加详细的步骤</p> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code><span class="token punctuation">[</span>root@linux101 ~<span class="token punctuation">]</span><span class="token comment"># ansible 192.168.10.103 -m ping -vv</span>
ansible <span class="token number">2.9</span>.27
  config <span class="token function">file</span> <span class="token operator">=</span> /etc/ansible/ansible.cfg
  configured module search path <span class="token operator">=</span> <span class="token punctuation">[</span>u<span class="token string">'/root/.ansible/plugins/modules'</span>, u<span class="token string">'/usr/share/ansible/plugins/modules'</span><span class="token punctuation">]</span>
  ansible python module location <span class="token operator">=</span> /usr/lib/python2.7/site-packages/ansible
  executable location <span class="token operator">=</span> /usr/bin/ansible
  python version <span class="token operator">=</span> <span class="token number">2.7</span>.5 <span class="token punctuation">(</span>default, Nov <span class="token number">16</span> <span class="token number">2020</span>, <span class="token number">22</span>:23:17<span class="token punctuation">)</span> <span class="token punctuation">[</span>GCC <span class="token number">4.8</span>.5 <span class="token number">20150623</span> <span class="token punctuation">(</span>Red Hat <span class="token number">4.8</span>.5-44<span class="token punctuation">)</span><span class="token punctuation">]</span>
Using /etc/ansible/ansible.cfg as config <span class="token function">file</span>
Skipping callback <span class="token string">'actionable'</span>, as we already have a stdout callback.
Skipping callback <span class="token string">'counter_enabled'</span>, as we already have a stdout callback.
Skipping callback <span class="token string">'debug'</span>, as we already have a stdout callback.
Skipping callback <span class="token string">'dense'</span>, as we already have a stdout callback.
Skipping callback <span class="token string">'dense'</span>, as we already have a stdout callback.
Skipping callback <span class="token string">'full_skip'</span>, as we already have a stdout callback.
Skipping callback <span class="token string">'json'</span>, as we already have a stdout callback.
Skipping callback <span class="token string">'minimal'</span>, as we already have a stdout callback.
Skipping callback <span class="token string">'null'</span>, as we already have a stdout callback.
Skipping callback <span class="token string">'oneline'</span>, as we already have a stdout callback.
Skipping callback <span class="token string">'selective'</span>, as we already have a stdout callback.
Skipping callback <span class="token string">'skippy'</span>, as we already have a stdout callback.
Skipping callback <span class="token string">'stderr'</span>, as we already have a stdout callback.
Skipping callback <span class="token string">'unixy'</span>, as we already have a stdout callback.
Skipping callback <span class="token string">'yaml'</span>, as we already have a stdout callback.
META: ran handlers
<span class="token number">192.168</span>.10.103 <span class="token operator">|</span> SUCCESS <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token punctuation">{</span>
    <span class="token string">&quot;ansible_facts&quot;</span><span class="token builtin class-name">:</span> <span class="token punctuation">{</span>
        <span class="token string">&quot;discovered_interpreter_python&quot;</span><span class="token builtin class-name">:</span> <span class="token string">&quot;/usr/bin/python&quot;</span>
    <span class="token punctuation">}</span>, 
    <span class="token string">&quot;changed&quot;</span><span class="token builtin class-name">:</span> false, 
    <span class="token string">&quot;ping&quot;</span><span class="token builtin class-name">:</span> <span class="token string">&quot;pong&quot;</span>
<span class="token punctuation">}</span>
META: ran handlers
META: ran handlers
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br></div></div><h3 id="使用示例"><a href="#使用示例" class="header-anchor">#</a> 使用示例</h3> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code><span class="token comment"># 以wang用户执行ping存活检测</span>
ansible all -m <span class="token function">ping</span> -u wang -k

<span class="token comment"># 以wang sudo至root执行ping存活检测，-b默认使用root用户</span>
ansible all -m <span class="token function">ping</span> -u wang -k -b

<span class="token comment"># 以wang sudo至mage用户执行ping存活检测</span>
ansible all -m <span class="token function">ping</span> -u wang -k -b --become-user<span class="token operator">=</span>mage

<span class="token comment"># 以wang sudo至root用户执行ls,-k 表示wang的password ,-K 表示root的password</span>
ansible all -m <span class="token builtin class-name">command</span> -u wang -a <span class="token string">'ls /root'</span> -b --become-user<span class="token operator">=</span>root -k -K

<span class="token comment"># ansible ping模块测试连接</span>
ansible <span class="token number">192.168</span>.38.126,192.168.38.127 -m <span class="token function">ping</span> -k 
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br></div></div><h2 id="ansible-doc-命令"><a href="#ansible-doc-命令" class="header-anchor">#</a> ansible-doc 命令</h2> <p>显示模块帮助</p> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code>ansible-doc <span class="token punctuation">[</span>options<span class="token punctuation">]</span> <span class="token punctuation">[</span>module<span class="token punctuation">..</span>.<span class="token punctuation">]</span>
    -a            显示所有模块的文档 <span class="token comment"># 不常用，显示太多</span>
    -l, --list    列出可用模块 <span class="token comment"># 常用</span>
    -s, --snippet 显示指定模块的playbook片段<span class="token punctuation">(</span>简化版,便于查找语法<span class="token punctuation">)</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br></div></div><h3 id="列出所有模块"><a href="#列出所有模块" class="header-anchor">#</a> 列出所有模块</h3> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code>ansible-doc -l
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><h3 id="查看指定模块帮助"><a href="#查看指定模块帮助" class="header-anchor">#</a> 查看指定模块帮助</h3> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code><span class="token punctuation">[</span>root@linux101 ~<span class="token punctuation">]</span><span class="token comment"># ansible-doc ping</span>
<span class="token operator">&gt;</span> PING    <span class="token punctuation">(</span>/usr/lib/python2.7/site-packages/ansible/modules/system/ping.py<span class="token punctuation">)</span> 
		 A trivial <span class="token builtin class-name">test</span> module, this module always returns <span class="token string">'pong'</span> on successful contact. It does not <span class="token function">make</span> sense <span class="token keyword">in</span> playbooks, but it is useful from <span class="token string">'/usr/bin/ansible'</span> to verify the ability to login and that a usable Python is configured. This is NOT ICMP ping, this is just a trivial <span class="token builtin class-name">test</span> module that requires Python on the remote-node. For Windows targets, use the <span class="token punctuation">[</span>win_ping<span class="token punctuation">]</span> module instead. For Network targets, use the <span class="token punctuation">[</span>net_ping<span class="token punctuation">]</span> module instead.

  * This module is maintained by The Ansible Core Team
OPTIONS <span class="token punctuation">(</span><span class="token operator">=</span> is mandatory<span class="token punctuation">)</span>:

- data
        Data to <span class="token builtin class-name">return</span> <span class="token keyword">for</span> the <span class="token string">'ping'</span> <span class="token builtin class-name">return</span> value.
 	    If this parameter is <span class="token builtin class-name">set</span> to <span class="token string">'crash'</span>, the module will cause an exception.
        <span class="token punctuation">[</span>Default: pong<span class="token punctuation">]</span>
        type: str
<span class="token punctuation">..</span>.
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br></div></div><h3 id="查看指定模块简化帮助"><a href="#查看指定模块简化帮助" class="header-anchor">#</a> 查看指定模块简化帮助</h3> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code><span class="token punctuation">[</span>root@linux101 ~<span class="token punctuation">]</span><span class="token comment"># ansible-doc -s ping</span>
- name: Try to connect to host, verify a usable python and <span class="token builtin class-name">return</span> <span class="token string">'pong'</span> on success
  ping:
      data: <span class="token comment"># Data to return for the 'ping' return value. If this parameter is set to 'crash', the module will cause an exception.</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br></div></div><h2 id="附-ssh-keygen配置"><a href="#附-ssh-keygen配置" class="header-anchor">#</a> 附：ssh-keygen配置</h2> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code><span class="token punctuation">[</span>root@linux101 ~<span class="token punctuation">]</span><span class="token comment"># ssh-keygen</span>
<span class="token punctuation">[</span>root@linux101 ~<span class="token punctuation">]</span><span class="token comment"># ssh-copy-id 192.168.10.102</span>
<span class="token punctuation">[</span>root@linux101 ~<span class="token punctuation">]</span><span class="token comment"># ssh-copy-id 192.168.10.103</span>
<span class="token punctuation">[</span>root@linux101 ~<span class="token punctuation">]</span><span class="token comment"># ssh-copy-id 192.168.10.104</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br></div></div><h2 id="ansible-galaxy-命令"><a href="#ansible-galaxy-命令" class="header-anchor">#</a> ansible-galaxy 命令</h2> <blockquote><p>通过他人在网上分享的配置，下载使用，访问地址 https://galaxy.ansible.com</p></blockquote> <h3 id="安装一个role"><a href="#安装一个role" class="header-anchor">#</a> 安装一个role</h3> <p>从访问的网站中，选择一个role进行安装，如geerlingguy.nginx</p> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code><span class="token punctuation">[</span>root@linux101 ~<span class="token punctuation">]</span><span class="token comment"># ansible install geerlingguy.nginx</span>
usage: ansible <span class="token punctuation">[</span>-h<span class="token punctuation">]</span> <span class="token punctuation">[</span>--version<span class="token punctuation">]</span> <span class="token punctuation">[</span>-v<span class="token punctuation">]</span> <span class="token punctuation">[</span>-b<span class="token punctuation">]</span> <span class="token punctuation">[</span>--become-method BECOME_METHOD<span class="token punctuation">]</span>
               <span class="token punctuation">[</span>--become-user BECOME_USER<span class="token punctuation">]</span> <span class="token punctuation">[</span>-K<span class="token punctuation">]</span> <span class="token punctuation">[</span>-i INVENTORY<span class="token punctuation">]</span> <span class="token punctuation">[</span>--list-hosts<span class="token punctuation">]</span>
               <span class="token punctuation">[</span>-l SUBSET<span class="token punctuation">]</span> <span class="token punctuation">[</span>-P POLL_INTERVAL<span class="token punctuation">]</span> <span class="token punctuation">[</span>-B <span class="token environment constant">SECONDS</span><span class="token punctuation">]</span> <span class="token punctuation">[</span>-o<span class="token punctuation">]</span> <span class="token punctuation">[</span>-t TREE<span class="token punctuation">]</span> <span class="token punctuation">[</span>-k<span class="token punctuation">]</span>
               <span class="token punctuation">[</span>--private-key PRIVATE_KEY_FILE<span class="token punctuation">]</span> <span class="token punctuation">[</span>-u REMOTE_USER<span class="token punctuation">]</span>
               <span class="token punctuation">[</span>-c CONNECTION<span class="token punctuation">]</span> <span class="token punctuation">[</span>-T TIMEOUT<span class="token punctuation">]</span>
               <span class="token punctuation">[</span>--ssh-common-args SSH_COMMON_ARGS<span class="token punctuation">]</span>
               <span class="token punctuation">[</span>--sftp-extra-args SFTP_EXTRA_ARGS<span class="token punctuation">]</span>
               <span class="token punctuation">[</span>--scp-extra-args SCP_EXTRA_ARGS<span class="token punctuation">]</span>
               <span class="token punctuation">[</span>--ssh-extra-args SSH_EXTRA_ARGS<span class="token punctuation">]</span> <span class="token punctuation">[</span>-C<span class="token punctuation">]</span> <span class="token punctuation">[</span>--syntax-check<span class="token punctuation">]</span> <span class="token punctuation">[</span>-D<span class="token punctuation">]</span>
               <span class="token punctuation">[</span>-e EXTRA_VARS<span class="token punctuation">]</span> <span class="token punctuation">[</span>--vault-id VAULT_IDS<span class="token punctuation">]</span>
               <span class="token punctuation">[</span>--ask-vault-pass <span class="token operator">|</span> --vault-password-file VAULT_PASSWORD_FILES<span class="token punctuation">]</span>
               <span class="token punctuation">[</span>-f FORKS<span class="token punctuation">]</span> <span class="token punctuation">[</span>-M MODULE_PATH<span class="token punctuation">]</span> <span class="token punctuation">[</span>--playbook-dir BASEDIR<span class="token punctuation">]</span>
               <span class="token punctuation">[</span>-a MODULE_ARGS<span class="token punctuation">]</span> <span class="token punctuation">[</span>-m MODULE_NAME<span class="token punctuation">]</span>
               pattern
ansible: error: unrecognized arguments: geerlingguy.nginx
<span class="token punctuation">[</span>root@linux101 ~<span class="token punctuation">]</span><span class="token comment"># ansible-galaxy install geerlingguy.nginx</span>
- downloading role <span class="token string">'nginx'</span>, owned by geerlingguy
- downloading role from https://github.com/geerlingguy/ansible-role-nginx/archive/3.1.1.tar.gz
- extracting geerlingguy.nginx to /root/.ansible/roles/geerlingguy.nginx
- geerlingguy.nginx <span class="token punctuation">(</span><span class="token number">3.1</span>.1<span class="token punctuation">)</span> was installed successfully
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br></div></div><h3 id="列出已经安装的配置"><a href="#列出已经安装的配置" class="header-anchor">#</a> 列出已经安装的配置</h3> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code><span class="token punctuation">[</span>root@linux101 ~<span class="token punctuation">]</span><span class="token comment"># ansible-galaxy list</span>
<span class="token comment"># /root/.ansible/roles</span>
- geerlingguy.nginx, <span class="token number">3.1</span>.1
<span class="token comment"># /usr/share/ansible/roles</span>
<span class="token comment"># /etc/ansible/roles</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br></div></div><h3 id="删除已安装的配置"><a href="#删除已安装的配置" class="header-anchor">#</a> 删除已安装的配置</h3> <p>可以使用命令删除，也可以直接删除安装后所在的目录/root/.ansible/roles/geerlingguy.nginx达到相同的效果</p> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code> ansible-galaxy remove geerlingguy.nginx
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><h2 id="ansible-pull-命令"><a href="#ansible-pull-命令" class="header-anchor">#</a> ansible-pull 命令</h2> <p>推送命令至远程，效率无限提升，对运维要求较高</p> <h2 id="ansible-playbook-命令"><a href="#ansible-playbook-命令" class="header-anchor">#</a> ansible-playbook 命令</h2> <blockquote><p>帮助文档：ansible-playbook --help
引用按照标准的yml语言写的脚本，详细使用参考后续的Playbook章节</p></blockquote> <p>示例：执行一个简单的playbook
创建一个playbook</p> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code><span class="token function">cat</span> hello.yml

<span class="token comment">#hello world yml file</span>
- hosts: websrvs
  remote_user: root
tasks:
- name: hello world
  command: /usr/bin/wall hello world
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br></div></div><p>执行</p> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code>ansible-playbook hello.yml
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><h2 id="ansible-vault-命令"><a href="#ansible-vault-命令" class="header-anchor">#</a> ansible-vault 命令</h2> <blockquote><p>管理加密解密yml文件，主要用于playbook的yml文件的加解密
ansible-vault [create|decrypt|edit|encrypt|rekey|view]</p></blockquote> <p>示例</p> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code>ansible-vault encrypt hello.yml 加密
ansible-vault decrypt hello.yml 解密
ansible-vault view hello.yml    查看
ansible-vault edit hello.yml    编辑加密文件
ansible-vault rekey hello.yml   修改口令
ansible-vault create new.yml    创建新文件
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br></div></div><h2 id="ansible-console命令"><a href="#ansible-console命令" class="header-anchor">#</a> ansible-console命令</h2> <blockquote><p>可交互执行命令，支持tab</p></blockquote> <p>示例</p> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code><span class="token punctuation">[</span>root@linux101 ~<span class="token punctuation">]</span><span class="token comment"># ansible-console</span>
Welcome to the ansible console.
Type <span class="token builtin class-name">help</span> or ? to list commands.

<span class="token comment"># 设置并发数：         forks n   例如： forks 10</span>
<span class="token comment"># 切换组：             cd 主机组 例如： cd web</span>
<span class="token comment"># 列出当前组主机列表： list</span>
<span class="token comment"># 列出所有的内置命令： ?或help</span>
<span class="token comment"># 执行用户@当前操作的主机组 (当前组的主机数量)[f:并发数]$</span>
root@all <span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">[</span>f:5<span class="token punctuation">]</span>$ list
<span class="token number">192.168</span>.10.102
<span class="token number">192.168</span>.10.103
<span class="token number">192.168</span>.10.104
root@all <span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">[</span>f:5<span class="token punctuation">]</span>$ <span class="token builtin class-name">cd</span> websrvs
root@websrvs <span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">[</span>f:5<span class="token punctuation">]</span>$ list
<span class="token number">192.168</span>.10.102
<span class="token number">192.168</span>.10.103
<span class="token number">192.168</span>.10.104
root@websrvs <span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">[</span>f:5<span class="token punctuation">]</span>$  yum <span class="token assign-left variable">name</span><span class="token operator">=</span>httpd <span class="token assign-left variable">state</span><span class="token operator">=</span>present
root@websrvs <span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">[</span>f:5<span class="token punctuation">]</span>$  <span class="token function">service</span> <span class="token assign-left variable">name</span><span class="token operator">=</span>httpd <span class="token assign-left variable">state</span><span class="token operator">=</span>started
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br></div></div></div></div>  <div class="page-edit"><!----> <!----> <div class="last-updated"><span class="prefix">Last Updated:</span> <span class="time">2022/05/22, 12:42:00</span></div></div> <div class="page-nav-wapper"><div class="page-nav-centre-wrap"><a href="/pages/388924/" class="page-nav-centre page-nav-centre-prev"><div class="tooltip">配置说明</div></a> <a href="/pages/2c8a0a/" class="page-nav-centre page-nav-centre-next"><div class="tooltip">常用模块</div></a></div> <div class="page-nav"><p class="inner"><span class="prev">
        ←
        <a href="/pages/388924/" class="prev">配置说明</a></span> <span class="next"><a href="/pages/2c8a0a/">常用模块</a>→
      </span></p></div></div></div> <!----></main></div> <div class="footer"><div class="icons"><a href="mailto:work_stt@163.com" title="email" target="_blank" class="iconfont icon-youjian"></a><a href="https://github.com/shetengteng" title="GitHub" target="_blank" class="iconfont icon-github"></a></div> 
  Theme by
  <a href="https://github.com/xugaoyi/vuepress-theme-vdoing" target="_blank" title="本站主题">Vdoing</a> 
    | Copyright © 2021-2022
    <span>Shetengteng | MIT License</span></div> <div class="buttons"><div title="返回顶部" class="button blur go-to-top iconfont icon-fanhuidingbu" style="display:none;"></div> <div title="去评论" class="button blur go-to-comment iconfont icon-pinglun" style="display:none;"></div> <div title="主题模式" class="button blur theme-mode-but iconfont icon-zhuti"><ul class="select-box" style="display:none;"><li class="iconfont icon-zidong">
          跟随系统
        </li><li class="iconfont icon-rijianmoshi">
          浅色模式
        </li><li class="iconfont icon-yejianmoshi">
          深色模式
        </li><li class="iconfont icon-yuedu">
          阅读模式
        </li></ul></div></div> <!----> <!----> <!----></div><div class="global-ui"><div></div></div></div>
    <script src="/assets/js/app.ab6a7ec7.js" defer></script><script src="/assets/js/2.bc9beebf.js" defer></script><script src="/assets/js/280.07da039a.js" defer></script>
  </body>
</html>
